package com.mf.springboot.backend.commonModule.common;

/**
 * Created by zhang on 2017/9/18.
 */

import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 对文本进行处理的类
 *
 *
 *
 */
public class TextHelper {
    /**
     * 通用的截取字符串的方法
     *
     * @param length
     *            截取字符串的长度
     * @param bool
     *            是否去除html标签
     * @param text
     *            要处理的字符串
     * @return
     */
    public static String subString(int length, boolean isReplaceHtml, String text) {
        if (isNullOrEmpty(text))
            return null;
        text = isReplaceHtml ? replaceHTML(text) : text.trim();
        if (text.length() > length) {
            return text.substring(0, length);
        }
        return text;
    }

    /**
     * 对文本去除HTML标签
     * @param text
     * @return
     */
    public static String replaceHTML(String text) {
        if (isNullOrEmpty(text))return null;
        return text.replaceAll("\t|\r|\n|<[^>]*?>|&nbsp;", "").trim();
    }

    /**
     * 判断对象为空字符串或者为null，如果满足其中一个条件，则返回true
     * @param o
     * @return
     */
    public static boolean isNullOrEmpty(Object object) {
        return object == null || "".equals(object);
    }

    /**
     * 判断字符串是否为空
     *
     * @param str
     *            字符串
     * @return true：为空； false：非空
     */
    public static boolean isNotNull(String str) {
        if (str != null && !str.trim().equals("")) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * 对字符串进行千分位划分 457154==>￥457,154.00
     *
     * @param o
     * @param isInt
     *            是否划分为整型 457154==>￥457,154
     * @return
     */
    public static String getTextThousands(Object obj, boolean isInt) {
        if (isNullOrEmpty(obj))
            return null;
        NumberFormat df = null;
        if (isInt) {
            df = DecimalFormat.getNumberInstance(Locale.CHINA);
        } else {
            df = NumberFormat.getCurrencyInstance(Locale.CHINA);
        }
        return df.format(obj);
    }

    /**
     * 获取富文本内容中的图片链接地址
     *
     * @return
     */
    public static List<String> getTextImageSrc(String text) {
        if (TextHelper.isNullOrEmpty(text)) return null;
        String regex = "<\\s*[I|i][m|M][g|G]\\s+([^>]*)\\s*>";
        Pattern pa = Pattern.compile(regex, Pattern.DOTALL);
        Matcher ma = pa.matcher(text);
        List<String> list = new ArrayList<String>();
        while (ma.find()) {// 首先判断话题内容中是否有图片
            list.add(ma.group());
        }
        if (list.size() != 0) {// 有图片文件
            List<String> imgSrcList = new ArrayList<String>();
            String a = null;
            for (String s : list) {
                ma = Pattern.compile("[s|S][R|r][c|C]=[\"|'](.*?)[\"|']").matcher(s);
                if (ma.find()) {
                    a = ma.group();
                }
                a = a.replaceAll("[s|S][R|r][c|C]=[\"|']", "").replaceAll("[\"|']", "");
                imgSrcList.add(a);
            }
            return imgSrcList;
        } else {
            return null;
        }
    }

    /**
     * 获取富文本内容中视频封面图片，如果有多个视频，则默认多个视频的封面(只针对于<embed data-image="ccc.jpg">格式的视频)
     *
     * @return
     */
    public static List<String> getTextVideoCoverSrc(String text) {
        if (TextHelper.isNullOrEmpty(text))	return null;
        String regex = "<\\s*[e|E][m|M][B|b][e|E][d|D]\\s+([^>]*)\\s*>";
        List<String> list = new ArrayList<String>();
        Pattern pa = Pattern.compile(regex, Pattern.DOTALL);
        Matcher ma = pa.matcher(text);
        while (ma.find()) {
            list.add(ma.group());
        }
        if (list.size() != 0) {
            List<String> videoImageList = new ArrayList<String>();
            String a = null;
            for (String s : list) {
                ma = Pattern.compile("data-image=[\"|'](.*?)[\"|']").matcher(s);
                if (ma.find()) {
                    a = ma.group();
                }
                a = a.replaceAll("data-image=[\"|']", "").replaceAll("[\"|']", "");
                videoImageList.add(a);
            }
            return videoImageList;
        } else {
            return null;
        }
    }

    /**
     * 描述:获得包含中文的字符串长度方法(一个中文为2个字符)
     *
     * @return
     */
    public static int getTextLength(String text) {
        if (isNullOrEmpty(text)) return 0;
        int len = 0;
        for (int i = 0; i < text.length(); i++) {
            if (text.charAt(i) > 127 || text.charAt(i) == 94) {
                len += 2;
            } else {
                len++;
            }
        }
        return len;
    }
}

